home *** CD-ROM | disk | FTP | other *** search
/ Everything For A Hacker / 19990506-[HACK].iso / HEXEDIT / TCRASM / X390W32S.ZIP / TXA.SPF next >
Text File  |  1997-02-19  |  6KB  |  204 lines

  1. /***********************************************************************
  2.  
  3.  (c) Copyright 1994-1997, Tachyon Software
  4.  
  5.  MACRO:     TXA - Tachyon 390 Cross Assembler
  6.  
  7.  PURPOSE:   Edit macro for SPF/PC and Tritus SPF to assemble the
  8.             program currently being edited and display any errors
  9.             that are found.
  10.  
  11.  SIDE       If error messages are found, sets Alt-F5 key to
  12.  EFFECT:    LOCATE SPECIAL so that the user can use that key
  13.             to jump between all the error messages found by the
  14.             compiler.  Will not modify the key setting If it has
  15.             been changed from its default.
  16.  
  17.             ISPEXEC SHORT and LONG messages are modified to reflect
  18.             the outcome of the compile.
  19.  
  20.  NOTE:      You must change the first statement below (X390PATH=...)
  21.             to reflect the path of the Tachyon 390 Cross Assembler.
  22.  
  23.  CHANGES:   Mar 30, 1996 - Improved by Jared Thomas of BMC Software
  24.                            to split the note lines at 72 characters.
  25.  
  26.             May 25, 1996 - Changed SYSLIB to use new variable syntax.
  27.  
  28.             Sep  3, 1996 - Updated to support Tritus SPF
  29.  
  30.             Nov 30, 1996 - Updated to support SPF/Professional
  31.  
  32.             Feb 19, 1997 - Removed obsolete -ND option for release 1.2
  33.  
  34. ***********************************************************************/
  35.  
  36. /* Change the following statement to be the path containing
  37.    the Tachyon 390 Cross Assembler program files. */
  38. X390PATH = "C:\X390\"
  39.  
  40. /* If you are running the Windows version and want to use
  41.    the GUI instead of the command-line assembler, change
  42.    the following statement to: X390WIN = 1 */
  43. X390WIN = 0
  44.  
  45. /* Change the following statement as needed for your environment. */
  46. SYSLIB = '"-SL&D*.MAC;&S"'
  47.  
  48. /* The following statement sets the default parameters. */
  49. DEFPARMS = "-NL -NO"
  50.  
  51. trace off
  52.  
  53. 'ISREDIT MACRO(PARMS)'
  54. If PARMS = "" Then PARMS = DEFPARMS
  55.  
  56. /* Get rid of previous error lines */
  57. 'ISREDIT RESET SPECIAL'
  58.  
  59. /* If source has not been saved, save it */
  60. 'ISREDIT (modified) = DATA_CHANGED'
  61. If (modified=YES) Then
  62.   'ISREDIT SAVE'
  63.  
  64. /* Retrieve filename information about source file
  65.    and bild the command line to invoke the assembler. */
  66. outFile = "TXATERM.OUT"
  67. errFile = "TXAERROR.OUT"
  68. ZEDFQNM = ''
  69. 'ISPEXEC VGET ZEDFQNM'
  70. If length(ZEDFQNM) == 0 Then Do
  71.    'ISREDIT (DATASET) = DATASET'
  72.    filename = TRANSLATE(dataset)
  73.    filename = FILESPEC("Name",filename)
  74.    'ISPEXEC VGET ZVERSION'
  75.    PARSE VAR ZVERSION spfver '.' spfrel '.' spfmod
  76.    If X390WIN <> 0 Then
  77.       X390CMD = X390PATH"X390WIN.EXE" PARMS SYSLIB filename "-TERM("outFile")"
  78.    Else Do
  79.       X390CMD = X390PATH"X390.EXE" PARMS SYSLIB filename "1>"outFile "2>"errFile
  80.       If spfver >= 5 Then
  81.          X390CMD = value("COMSPEC",,"CMD") '/C"'X390CMD'"'
  82.       End
  83.    End
  84. Else Do
  85.    spfver = 0 /* 0 = Tritus SPF */
  86.    filename = ZEDFQNM
  87.    X390CMD = X390PATH"X390.EXE" PARMS SYSLIB filename "1>"outFile "2>"errFile
  88.    End
  89.  
  90. /* Invoke the assembler */
  91. Address 'CMD' X390CMD
  92. compileRc = RC
  93.  
  94. found_one = 0
  95. messages = 0
  96.  
  97. x = STREAM(errFile,'C','OPEN READ')
  98. If left(x,5) = 'READY' Then Do
  99.    Do While lines(errFile) <> 0
  100.       dataline = linein(errFile)
  101.       Call top_msg dataline
  102.       found_one = 1
  103.    End
  104.    x = STREAM(errFile,'C','CLOSE')
  105.    Address 'CMD' 'DEL' errFile
  106.    End
  107.  
  108.  
  109. prev_lineno = 0
  110. x = STREAM(outFile,'C','OPEN READ')
  111. If left(x,5) = 'READY' Then Do
  112.    Do While lines(outFile) <> 0
  113.       dataline = linein(outFile)
  114.       parse var dataline errFn ' : ' macFn ' : ' msg
  115.       If msg = '' | words(macFn) <> 1 Then Do
  116.          Parse var dataline errFn ' : ' msg
  117.          macFn = ''
  118.          End
  119.       Else Do
  120.          p = lastpos('\','\'macFn)
  121.          macFn = substr(macFn,p)' '
  122.          End
  123.       Parse var errFn errFn'('lineno')' .
  124.       If (length(lineno) = 0) | (errFn <> filename) Then Do
  125.          Call top_msg dataline
  126.          End
  127.       Else Do
  128.          If lineno > prev_lineno Then Call dump_msg prev_lineno
  129.          prev_lineno = lineno
  130.          Call add_msg macFn||msg
  131.          End
  132.       found_one = 1
  133.       messages = messages + 1
  134.       End
  135.    x = STREAM(outFile,'C','CLOSE')
  136.    Address 'CMD' 'DEL' outFile
  137.    End
  138. Call dump_msg prev_lineno
  139.  
  140. /* If ALT-F5 is still set to RFIND, Then change it to LOCATE SPEC */
  141. 'ISPEXEC VGET ZPF41'
  142. If (ZPF41=RFIND) Then Do
  143.    ZPF41 = "LOCATE SPECIAL"
  144.    'ISPEXEC VPUT ZPF41'
  145.    End
  146.  
  147. If found_one Then Do
  148.    'ISREDIT LOCATE FIRST SPECIAL'
  149.    'ISREDIT UP 1'
  150.    End
  151.  
  152. If spfver >= 5 Then Do
  153.    If messages == 0 Then
  154.        ZEDSMSG = "No messages"
  155.    Else If messages == 1 Then
  156.        ZEDSMSG = "1 message"
  157.    Else ZEDSMSG = messages "messages"
  158.    ZEDLMSG = ZEDSMSG "produced by the assembler."
  159.    End
  160. Else Do
  161.    ZEDSMSG = "X390 RC =" compileRc
  162.    ZEDLMSG = "Tachyon 390 Cross Assembler return code =" compileRc
  163.    End
  164.  
  165. 'ISPEXEC SETMSG MSG(ISRZ000)'
  166. Exit
  167.  
  168. add_msg: Procedure Expose msg. m
  169.   Parse Arg text
  170.   Trace off
  171.   Do While text <> ''
  172.     If length(text) <= 72 Then p = length(text)+1
  173.                           Else p = lastpos(' ',text,72)
  174.     If p <= 1 Then p = 72+1
  175.     m=m+1; msg.m = left(text,p-1)
  176.     text = ' 'strip(substr(text,p),'Leading')
  177.     End  /* text not empty */
  178.   Return
  179.  
  180. dump_msg: Procedure Expose msg. m spfver
  181.   Parse Arg lineno
  182.   Trace off
  183.   If lineno > 0 Then Do i = m To 1 By -1
  184.     msg = msg.i
  185.     If spfver > 0 Then Address ISREDIT "LINE_AFTER "lineno" = MSGLINE (MSG)"
  186.     Else Address ISREDIT "LINE_AFTER "lineno" = DIAGLINE 0 (MSG)"
  187.     End i
  188.   m=0; Drop msg.;  msg.=''
  189.   Return
  190.  
  191. top_msg: Procedure
  192.   Parse Arg text
  193.   Trace off
  194.   m=0; drop msg.;  msg.=''
  195.   Do While text <> ''
  196.     If length(text) <= 72 Then p = length(text)+1
  197.                           Else p = lastpos(' ',text,72)
  198.     If p <= 1 Then p = 72+1
  199.     msg = left(text,p-1)
  200.     Address ISREDIT "LINE_BEFORE .ZFIRST = NOTELINE (MSG)"
  201.     text = ' 'strip(substr(text,p),'Leading')
  202.     End  /* text not empty */
  203.   Return
  204.